const ajax = require('../../tool/ajax');
const login = require('../login/index');
const screen = require('../component/screen');//截图
let pupConfig, page, config, filing;

/**
 * 申请仲裁页面脚本
 */
const start = async (myPupConfig) => {
  pupConfig = myPupConfig;
  page = pupConfig.page;
  config = pupConfig.config.common;
  filing = pupConfig.config.filing;

  await login(pupConfig);//默认账号登录
  await selectProxy();
  await inputProposerInfo();
  await inputRespondentInfo();
  await inputCaseInfo();
  await inputDeliveryInfo();
  return await previewCaseInfo();
}

/**
 * 选择代理方式
 */
const selectProxy = async () => {
  await page.goto(config.host + 'apply/proxy');

  //等待页面加载完成
  await page.waitFor('.rs-proxy-modal-main button');

  await page.click('.rs-proxy-modal-main button');

  //等待弹框消失
  await page.waitFor('.rs-proxy-modal-main ', {hidden: true});
  await screen(page, '选择代理方式', 1);

  await page.click('.rs-proxy-button button');
}

/**
 * 填写申请人信息
 */
const inputProposerInfo = async () => {
  //等待页面初始化
  await ajax.waitForResponse(page, 'getCaseInfo.do');

  //选择身份证类型
  await page.click('#litigantCertificateType');
  await page.waitFor('.ant-select-dropdown-menu-item');
  await page.click('.ant-select-dropdown-menu-item');

  //上传身份证。当前页面需要先上传文件，因为上传成功后会进行OCR识别，然后刷新表单。
  let inputs = await page.$$('span.ant-upload input');
  //使用uploadFile()进行文件上传。如果使用相对路径，则相对于工程目录。
  await inputs[0].uploadFile(config.imgPathUpload + 'girl.png');
  //等待上传身份证成功
  await ajax.waitForResponse(page, 'getDataByOCR.do');
  await inputs[1].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'getDataByOCR.do');

  //填写信息
  await page.type('#litigantName', filing.proposer1.name);
  await page.type('#litigantCertificateNo', filing.proposer1.identity);
  await page.type('#litigantAddress', filing.proposer1.address)

  //选择性别
  await page.click('#litigantSex');
  await page.waitFor('.ant-select-dropdown-menu-item');
  let menuItems = await page.$$('.ant-select-dropdown-menu-item');
  //上一个下拉列表还存在，所以下标要+1
  await menuItems[1 + filing.proposer1.sex].click();

  await screen(page, '填写申请人信息', 1);

  await page.click('.rs-applicant-footer button');
}

/**
 * 填写被申请人信息
 */
const inputRespondentInfo = async () => {
  //等待页面初始化:有些页面加载时会先请求数据，然后根据请求的数据渲染页面，所以需要先等数据请求完成。
  await ajax.waitForResponse(page, 'getCaseInfo.do');
  let adds = await page.$$('.zc-apply-add>span');
  await adds[0].click();

  //选择身份证类型
  await page.waitFor('#litigantCertificateType');
  await page.click('#litigantCertificateType');
  await page.waitFor('.ant-select-dropdown-menu-item');
  await page.click('.ant-select-dropdown-menu-item');

  //上传身份证
  let inputs = await page.$$('span.ant-upload input');
  //使用uploadFile()进行文件上传。如果使用相对路径，则相对于工程目录。
  await inputs[0].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'getDataByOCR.do');
  await inputs[1].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'getDataByOCR.do');

  //填写信息
  await page.type('#litigantName', filing.respondent1.name);
  await page.type('#litigantCertificateNo', filing.respondent1.identity);
  await page.type('#litigantAddress', filing.respondent1.address);

  //选择性别
  await page.click('#litigantSex');
  await page.waitFor('.ant-select-dropdown-menu-item');
  let menuItems = await page.$$('.ant-select-dropdown-menu-item');
  await menuItems[1 + filing.respondent1.sex].click();

  await screen(page, '填写被申请人信息', 1);

  await page.click('.zc-respondent-footer button');
}

/**
 * 填写案件材料
 */
const inputCaseInfo = async () => {
  //等待页面初始化:有些页面加载时会先请求数据，然后根据请求的数据渲染页面，所以需要先等数据请求完成。
  await ajax.waitForResponse(page, 'queryCaseSummaryList.do');

  //选择案由。非button元素不在页面的可见位置，使用click()时会异常。可以点击其他button元素或输入input元素，让其先可见。
  await page.type('#arbitrationAgreement', '');//用于让案由组件可见
  await page.click('#arbitrationSummaryId');
  for (let item of filing.caseInfo.summary) {
    let selector = `li[title="${item}"]`;
    await page.waitFor(selector);
    await page.click(selector);
  }

  //填写表单
  await page.type('#arbitrationAgreement', filing.caseInfo.arbitrationAgreement);
  await page.type('#arbitrationRequest', filing.caseInfo.arbitrationRequest);
  await page.type('#arbitrationFaceReasons', filing.caseInfo.arbitrationFaceReasons);
  await page.type('#arbitrationTagerAmount', filing.caseInfo.arbitrationTagerAmount);

  //上传文件
  let inputs = await page.$$('span.ant-upload input');
  await inputs[0].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'updFileStatus.do');
  await inputs[1].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'updFileStatus.do');
  await inputs[2].uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'updFileStatus.do');

  //上传证据
  let buttons = await page.$$('button.ant-btn.ant-btn-primary');
  buttons[1].click();
  //等待证据弹框加载
  await page.waitFor('#fileBizName');
  await page.type('#fileBizName', filing.caseInfo.fileBizName);
  await page.type('#fileObjective', filing.caseInfo.fileObjective);
  await page.type('#filePageSize', filing.caseInfo.filePageSize);
  //上传证据文件
  let input3 = await page.$('.ant-modal-body span.ant-upload input');
  await input3.uploadFile(config.imgPathUpload + 'girl.png');
  await ajax.waitForResponse(page, 'updFileStatus.do');
  await page.click('.ant-modal-footer button.ant-btn.ant-btn-primary');

  await screen(page, '填写案件材料', 1);

  await page.click('.zc-other-material-footer button');
}

/**
 * 填写送达信息
 */
const inputDeliveryInfo = async () => {
  //等待页面初始化:有些页面加载时会先请求数据，然后根据请求的数据渲染页面，所以需要先等数据请求完成。
  await ajax.waitForResponse(page, 'getCaseInfo.do');

  await page.waitFor('.ant-modal-body button');
  await page.click('.ant-modal-body button');

  //填写表单
  let inputs = await page.$$('input.ant-input');
  await inputs[0].type(filing.proposer1.email);
  await inputs[1].type('123456');
  await inputs[2].type(filing.proposer1.tel);
  await inputs[3].type('123456');
  await inputs[5].type(filing.respondent1.email);
  await inputs[6].type(filing.respondent1.tel);

  //发送验证码。先填写电话和邮箱，再发送验证码
  let buttons = await page.$$('.ant-input-suffix button');
  await buttons[0].click();
  await ajax.waitForResponse(page, 'sendMailOtp.do');
  await buttons[1].click();
  await ajax.waitForResponse(page, 'sendSmsOtp.do');

  await screen(page, '填写送达信息', 1);

  await page.click('.submit button.submit-up');
}

/**
 * 预览案件信息
 */
const previewCaseInfo = async () => {
  await ajax.waitForResponse(page, 'getCaseInfo.do');

  await screen(page, '预览案件信息', 1);

  //提交立案
  await page.waitFor('.zc-previewCase-footer button');
  await page.click('.zc-previewCase-footer button');

  /**
   * 获取案件的秘书ID与案件ID
   */
  let caseInfo = await ajax.waitForResponse(page, 'submitCase.do');
  //打开详情页
  await page.goto(config.host + 'caseDetail?caseId=' + caseInfo.data.caseId);
  //案件详细信息
  let allCaseInfo = await ajax.waitForResponse(page, 'getAllCaseInfo.do');

  return {caseId: caseInfo.data.caseId, secretaryId: allCaseInfo.data.arbitrationSecretaireId};
}

module.exports = start;